//PC协议的头文件

#ifndef __PC_AJR_H
#define __PC_AJR_H

//引用的头文件
#include "stm32f10x.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

//
struct PC_protocol_hdr {  
  u8 	ProlVersion;		//协议版本 	[0]
  u8	PacketLen[2];		//包长 		[1、2]
  u8 	DevType[2];			//设备类型 	[3、4]
  u8	DevID[16];			//设备ID   	[5、20]
  u8	ComdType;			//传递参数	[21] ：bit0：1-请求，0-应答；bit1：1-密文，0-明文；
  u8 	PacketID[2];		//包识别码	[22、23]
  u8	CipherText[80];	//密文/明文：6+n+m < 80 (密文是16倍数，明文不是) [12:??]
};
struct PC_CipherText_hdr {  
  u8 	Checksum[4];	//校验码："RFHZ"
  u8	ComdID;				//命令号
  u8 	DataLen;			//数据长度
  u8	Data[74];			//数据
};

extern u8 sn[];
extern u8 EquRevLen;
extern u8 PC_RevBuf[];			//接收缓存(解密后)
extern u8 PC_SendBuf[];			//发送缓存(加密前)
extern u8 PC_Send_OK, PC_SendLen;

//
typedef struct
{
	//PC主动连接（设备被动应答）
	u8 	RevStatus;			//接收状态: 未同步、已同步
	u8 	RevKeyData[16];		//被动密钥
	//设备主动连接
	u8 	SendStatus;			//发送状态: 未同步、忙等待、空闲
	u8 	SendKeyData[16];	//主动密钥
	u8  LastSendComdID;		//上次主动发送的命令号（失败后，退回记录）
	u8  TimeOut;			//连续同步次数()
	u16 WaitPacketID;		//等待返回的包识别码
	u16 WaitPacketTtl;		//等待返回的时间
	u32 	Watchdog_SendOK;	//喂狗包是否发送
	u8 	Data_SendOK;	//包是否发送
}TypeEquipmentUDPHandle;

extern TypeEquipmentUDPHandle  EquProlVar;

typedef struct
{
u8 pac[50];
u16 len;
}s_Load_Dev;

extern u8 LoadDevSendSta;
extern s_Load_Dev load_dev;
//
#define SERIAL_CRC_ERR		0x02		//校验错02
#define SERIAL_CHA_ERR		0x03		//03
#define SERIAL_CMD_ERR		0x04		//无效指令错误04
#define SERIAL_LEN_ERR		0x05		//长度错误05
#define SERIAL_PAR_ERR		0x06		//06
#define SERIAL_PSW_ERR		0x07		//07
//08 校验码不符
//09 不是允许的明文命令号
#define CHECK_ERR				0xEE		//请求被同步
#define INVALID_CHARACTER		0x64		//非法字符100
#define ILLOGCAL_CHARACTER		0x65		//不合理字符101
#define INVALID_DATETIME		0x66		//时间非法102
#define DATA_OVERFLOW			0x67		//数据超出范围103
#define DATETIME_ERROR			0x68		//时间格式错误104
#define EMPTY_ITEM				0x69		//查询项目空105
#define TIMEREAD_ERROR			0x6A		//时间读取出错106
#define DATAFORMATE_ERROR		0x6B		//数据格式错误107
#define	SPACE_FULL				0x6C		//存储空间满108
#define URGENT_STATE 			0x6D		//当前是紧急状态，操作未执行109
#define SF_OPERATE_ERROR		0x6E		//flash操作失败110
#define FUN_DONOT				0x6F		//功能不可开启

//作为主动端时的变量
#define Unsynchronized 	0	//未同步
#define Synchronizeding 1	//同步中
#define SynchronizedOK 	2	//同步成功
#define UdpSendBusy			3	//忙等待
#define UdpSendLdle 		4	//空闲
#define UdpBackErr 			5	//错误回馈

#define PCRBUF ((struct PC_protocol_hdr *)&PC_RevBuf[0])
#define PCRDATA ((struct PC_CipherText_hdr *)&PC_RevBuf[24])
#define PCSBUF ((struct PC_protocol_hdr *)&PC_SendBuf[0])
#define PCSDATA ((struct PC_CipherText_hdr *)&PC_SendBuf[24])
	
//////////////////////////////////////////////////////////////
void ReturnPCAsk(u8 encode);
void ReturnPCAsk_RS(void);
void PCRevFunTask(u8 *indata, u8 inlen);
void UDP_Time_Task(void);
void UDP_Main(void);

void Equipment_Slaver(void);
#endif	/* __PC_AJR_H */

/*****END OF FILE*****/
